@echo off
setlocal EnableExtensions EnableDelayedExpansion
chcp 65001 >nul
cd /d %~dp0

REM ---- 可配置变量 ----
set "APP_NAME=小红猫版DPS统计器"
set "VERSION=2.1.0"
set "EXE_NAME=%APP_NAME%-v%VERSION%.exe"
set "ZIP_NAME=%APP_NAME%-v%VERSION%-便携版.zip"
set "DIST_DIR=dist"
set "TEMP_DIR=temp_build"

echo ==========================================
echo   小红猫版DPS统计器 - 打包脚本
echo ==========================================
echo.

:: 检查Node.js
echo [1/6] 检查Node.js环境...
node --version >nul 2>&1
if %errorLevel% neq 0 (
    echo ❌ 未找到Node.js！请从 https://nodejs.org/ 安装Node.js v18+
    pause
    exit /b 1
)

for /f "tokens=*" %%i in ('node --version') do (
    echo ✅ Node.js: %%i
)

:: 创建构建目录
echo.
echo [2/6] 创建构建目录...
if not exist "%DIST_DIR%" mkdir "%DIST_DIR%"
if not exist "%TEMP_DIR%" mkdir "%TEMP_DIR%"
echo ✅ 构建目录已创建

:: 安装构建工具
echo.
echo [3/6] 安装构建工具...
echo 正在安装pkg（全局）...
npm install -g pkg >nul 2>&1
if %errorLevel% neq 0 (
    echo ⚠️ pkg安装失败，尝试本地安装...
    npm install pkg
)

echo 正在安装archiver...
npm install archiver >nul 2>&1
echo 正在安装图标处理依赖（jimp、png-to-ico、rcedit）...
npm install jimp png-to-ico rcedit >nul 2>&1
echo ✅ 构建工具安装完成

:: 准备构建文件
echo.
echo [4/6] 准备构建文件...

:: 复制核心文件到临时目录
copy "app.js" "%TEMP_DIR%\" >nul
copy "server.js" "%TEMP_DIR%\" >nul
copy "server_wrapper.js" "%TEMP_DIR%\" >nul 2>nul
copy "create_config.js" "%TEMP_DIR%\" >nul 2>nul
copy "analyze_output.js" "%TEMP_DIR%\" >nul 2>nul
copy "install.py" "%TEMP_DIR%\" >nul 2>nul
copy "skill_names*.json" "%TEMP_DIR%\" >nul 2>nul

:: 复制目录
xcopy "public" "%TEMP_DIR%\public\" /E /I /Q >nul 2>nul
xcopy "floating_overlay" "%TEMP_DIR%\floating_overlay\" /E /I /Q >nul 2>nul
xcopy "algo" "%TEMP_DIR%\algo\" /E /I /Q >nul 2>nul

:: 创建临时package.json
echo 创建打包配置...
(
echo {
echo   "name": "star-resonance-dps-tracker",
echo   "version": "2.1.0",
echo   "main": "app.js",
echo   "bin": "app.js",
echo   "pkg": {
echo     "targets": ["node18-win-x64"],
echo     "assets": [
echo       "public/**/*",
echo       "floating_overlay/**/*", 
echo       "algo/**/*",
echo       "skill_names*.json",
echo       "install.py"
echo     ]
echo   }
echo }
) > "%TEMP_DIR%\package.json"

echo ✅ 构建文件准备完成

:: 执行打包
echo.
echo [5/6] 执行打包...
cd "%TEMP_DIR%"
REM 使用 npx pkg 优先，若失败再尝试全局 pkg
where npx >nul 2>nul
if %errorlevel% equ 0 (
  npx --yes pkg package.json --target node18-win-x64 --output "..\%DIST_DIR%\%EXE_NAME%" --compress GZip
) else (
  pkg package.json --target node18-win-x64 --output "..\%DIST_DIR%\%EXE_NAME%" --compress GZip
)
if %errorLevel% neq 0 (
    echo ❌ 打包失败！
    cd ..
    pause
    exit /b 1
)
cd ..

echo ✅ 可执行文件打包完成

:: 创建便携版
echo.
echo [6/6] 创建便携版压缩包...

:: 创建使用说明
(
echo %APP_NAME% v%VERSION% - 使用说明
echo.
echo === 快速开始 ===
echo 1. 双击"%EXE_NAME%"启动程序
echo 2. 程序会自动检测环境并修复依赖问题
echo 3. 启动成功后会自动打开浏览器和悬浮窗
echo 4. 进入游戏《星痕共鸣》开始战斗即可采集数据
echo.
echo === 注意事项 ===
echo - 需要以管理员权限运行（用于网络包捕获）
echo - 确保防火墙允许程序访问网络
echo - 首次运行可能需要下载依赖，请保持网络连接
echo.
echo === 技术支持 ===
echo 作者: Dimole ^<dmlgzs@qq.com^>
echo 作者: RdILy ^<1470950477@qq.com^>
echo 作者: the_wym ^<953759174@qq.com^>
echo 版本: v%VERSION%
echo 构建时间: %date% %time%
) > "%DIST_DIR%\使用说明.txt"

:: 为 EXE 设置图标（优先使用 redcat.ico，其次 redcat.JPG 自动生成）
if exist "redcat.ico" (
  echo [ICON] 检测到 redcat.ico，开始写入 EXE 图标...
  node -e "(async()=>{const r=require('rcedit');const p=require('path');const exe=p.join(process.cwd(),'dist','%EXE_NAME%');await new Promise((res,rej)=>r(exe,{icon:p.join(process.cwd(),'redcat.ico')},e=>e?rej(e):res()));console.log('done')})().catch(e=>{console.error(e);process.exit(1)})" >nul 2>&1
  if %errorLevel% equ 0 (echo [ICON] 已设置 EXE 图标) else (echo [ICON] 设置图标失败（不影响运行）)
) else if exist "redcat.JPG" (
  echo [ICON] 未检测到 redcat.ico，发现 redcat.JPG，尝试生成 ICO 并设置...
  node -e "(async()=>{const fs=require('fs');const p=require('path');const {Jimp}=require('jimp');const png2ico=require('png-to-ico');const r=require('rcedit');const jpg=p.join(process.cwd(),'redcat.JPG');const tmpIco=p.join(process.cwd(),'%TEMP_DIR%','icon.ico');if(!fs.existsSync('%TEMP_DIR%'))fs.mkdirSync('%TEMP_DIR%',{recursive:true});const base=await Jimp.read(jpg);const sizes=[16,24,32,48,64,128,256];const bufs=[];for(const s of sizes){const img=base.clone();img.resize(s,s);bufs.push(await img.getBufferAsync('image/png'));}const ico=await png2ico(bufs);fs.writeFileSync(tmpIco,ico);const exe=p.join(process.cwd(),'dist','%EXE_NAME%');await new Promise((res,rej)=>r(exe,{icon:tmpIco},e=>e?rej(e):res()));console.log('done')})().catch(e=>{console.error(e);process.exit(1)})" >nul 2>&1
  if %errorLevel% equ 0 (echo [ICON] 已设置 EXE 图标) else (echo [ICON] 设置图标失败（不影响运行）)
) else (
  echo [ICON] 未找到 redcat.ico 或 redcat.JPG，跳过图标设置
)

:: 生成版本信息
(
echo 星痕共鸣DPS追踪器 版本信息
echo.
echo 版本号: %VERSION%
echo 构建时间: %date% %time%
echo 构建平台: Windows x64
echo.
echo 组件信息:
echo - 主服务器: Express + Socket.IO
echo - 网络捕获: libpcap ^(cap^)
echo - 数据解析: protobufjs
echo - 桌面悬浮窗: Electron
echo - 打包工具: pkg
echo.
echo 技术特性:
echo ^> 零安装部署
echo ^> 自动依赖管理
echo ^> 实时数据处理
echo ^> 跨进程通信
echo ^> 智能错误恢复
echo.
echo 许可证: MPL-2.0
echo 作者: Dimole ^<dmlgzs@qq.com^>
echo 作者: RdILy ^<1470950477@qq.com^>
echo 作者: the_wym ^<953759174@qq.com^>
) > "%DIST_DIR%\版本信息.txt"

:: 使用PowerShell创建压缩包（包含版本信息）
powershell -command "Compress-Archive -Path '%DIST_DIR%\%EXE_NAME%', '%DIST_DIR%\使用说明.txt', '%DIST_DIR%\版本信息.txt' -DestinationPath '%DIST_DIR%\%ZIP_NAME%' -Force" >nul 2>&1

echo ✅ 便携版压缩包创建完成

:: 清理临时文件
echo.
echo 清理临时文件...
rmdir /s /q "%TEMP_DIR%" >nul 2>&1
echo ✅ 临时文件清理完成

:: 显示结果
echo.
echo ==========================================
echo           构建完成！
echo ==========================================
echo.
echo 生成的文件：
for %%f in (dist\*) do (
    echo   📦 %%~nxf
)

echo.
echo 发布说明：
echo   1. exe文件可直接运行，无需安装
echo   2. 首次运行需要管理员权限
echo   3. 程序会自动检测和修复环境问题
echo.
echo 构建日志已保存到当前目录
echo ==========================================

pause
